package com.lmy.pool;


import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 定时任务线程池使用
 * 使用多线程执行任务，不会造成任务阻塞
 * 在定时任务线程池中，最大线程数无意义，起作用的是核心线程数
 * Leader-Follower模式：只有leader线程才能执行任务，follower线程等待执行任务。避免了线程的唤醒和阻塞操作
 */
public class ScheduleThreadPoolTest {

    public static void main(String[] args) {
        //核心线程数为1的 单线程线程池
//        ScheduledExecutorService singleScheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        //核心线程数为5的 多线程线程池
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
        for (int i = 0; i < 2; i++) {
            //scheduleAtFixedRate 可以周期执行任务，即实现定时效果。
            //指定 立即执行 initialDelay=0 间隔时间2s period=2 Timeunit.SECONDS
            scheduledThreadPool.scheduleAtFixedRate(new Task("task" + i),  0, 2, TimeUnit.SECONDS);
        }
    }
}
